<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1、test
        var rg = /123/;
        console.log(rg.test(123));
        console.log(rg.test('abc'));

        /**
        * 边界符
        * 1、^ 必须以什么开头
        * 2、$ 必须以什么结尾
        **/

        var reg = /^abc/;
        console.log(reg.test('abcdef'));

        var reg1 = /abc$/;
        console.log(reg1.test('cefabc'));

        // 精确匹配
        var reg2 = /^abc$/;
        console.log(reg2.test('abc'));

        /**
        * 字符类
        * 1、[]（或）表示有一系列字符可以选择，只要匹配一个就行了
        * 2、a-zA-Z 26个字母 
        **/

        var reg3 = /[abc]/;
        console.log(reg3.test('andy'));
        console.log(reg3.test('jone'));
    
        var reg4 = /^[abc]$/; //(三选一)
        console.log(reg4.test('a'));
        
        var reg5 = /^[a-z]$/; //(26选一)
        console.log(reg5.test('a'));
        
        // [^] 取反 如果中括号中包含^ 表示取反的意思 千万别和边界符 ^ 混淆
        var reg6 = /[^abc]/;
        console.log(reg6.test('abc'));

        /**
        * 量词符：设定某个模式出现的次数
        * 1、* 重复零次货更多次
        * 2、+ 重复一次或更多次
        * 3、? 重复零次或一次
        * 4、{n} 重复n次
        * 5、{n,} 重复n甚至更多
        * 6、{n,m} 重复n到m次
        **/
        var initFn = (function(){
            // *
            var reg = /^a*$/
            console.log(reg.test('aaaaaaaa'));

            // +
            var reg1 = /^a+$/
            console.log(reg1.test('a'));

            // ?
            var reg2 = /^a?$/
            console.log(reg2.test('a'));

            // {}
            var reg3 = /^a{1,2}$/
            console.log(reg3.test('a'));

            var reg4 = /^abc{3}$/;
            console.log(reg4.test('abccc'));
            console.log(reg4.test('abcabcabc'));

            // ()优先级
            var reg5 = /^(abc){3}$/;
            console.log(reg5.test('abccc'));
            console.log(reg5.test('abcabcabc'));
        });
        
        
        var initFn2 = (function(){
            // \d：匹配0-9之间的任意数字，相当于[0-9]
            // \D：匹配0-9之外的任意字符，相当于[^0-9]
            // \w：匹配任意字母、数字、下划线，相当于[A-Za-z0-9_]
            // \W：除所有字母、数字、下划线之外的字符，相当于[^A-Za-z0-9_]
            // \s：匹配空格（包括换行符、制表符、空格符等），相当于[\t\r\n\v\f]
            // \S：匹配非空格的字符，相当于[^\t\r\n\v\f]

            // replace 字符串替换
            // 只能替换一个，可以使用修饰符
            // g 全局匹配
            // i 忽略大小写
            var str = 'andy和red和andy';
            var newStr = str.replace(/andy/g, 'baby');
            console.log(newStr);
        });

        initFn();
        initFn2();

    </script>
</body>
</html>